package com.ruoyi.basebill.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.basebill.DTO.GzffEntryInfo;
import com.ruoyi.basebill.DTO.GzffInfo;
import com.ruoyi.basebill.domain.WfzGzft;
import com.ruoyi.basebill.domain.WfzGzftentry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.basebill.domain.WfzGzjtentry;
import com.ruoyi.basebill.mapper.WfzGzjtMapper;
import com.ruoyi.basebill.domain.WfzGzjt;
import com.ruoyi.basebill.service.IWfzGzjtService;

/**
 * 工资计提Service业务层处理
 * 
 * @author xiefeng
 * @date 2022-12-12
 */
@Service
public class WfzGzjtServiceImpl implements IWfzGzjtService 
{
    @Autowired
    private WfzGzjtMapper wfzGzjtMapper;

    /**
     * 查询工资计提
     * 
     * @param fid 工资计提主键
     * @return 工资计提
     */
    @Override
    public WfzGzjt selectWfzGzjtByFid(Long fid)
    {
        return wfzGzjtMapper.selectWfzGzjtByFid(fid);
    }

    /**
     * 查询工资计提列表
     * 
     * @param wfzGzjt 工资计提
     * @return 工资计提
     */
    @Override
    public List<WfzGzjt> selectWfzGzjtList(WfzGzjt wfzGzjt)
    {
        return wfzGzjtMapper.selectWfzGzjtList(wfzGzjt);
    }

    /**
     * 新增工资计提
     * 
     * @param wfzGzjt 工资计提
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWfzGzjt(WfzGzjt wfzGzjt)
    {
        int rows = wfzGzjtMapper.insertWfzGzjt(wfzGzjt);
        insertWfzGzjtentry(wfzGzjt);
        return rows;
    }

    /**
     * 修改工资计提
     * 
     * @param wfzGzjt 工资计提
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWfzGzjt(WfzGzjt wfzGzjt)
    {
        wfzGzjtMapper.deleteWfzGzjtentryByFparentid(wfzGzjt.getFid());
        insertWfzGzjtentry(wfzGzjt);
        return wfzGzjtMapper.updateWfzGzjt(wfzGzjt);
    }

    /**
     * 批量删除工资计提
     * 
     * @param fids 需要删除的工资计提主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGzjtByFids(Long[] fids)
    {
        wfzGzjtMapper.deleteWfzGzjtentryByFparentids(fids);
        return wfzGzjtMapper.deleteWfzGzjtByFids(fids);
    }

    /**
     * 删除工资计提信息
     * 
     * @param fid 工资计提主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWfzGzjtByFid(Long fid)
    {
        wfzGzjtMapper.deleteWfzGzjtentryByFparentid(fid);
        return wfzGzjtMapper.deleteWfzGzjtByFid(fid);
    }

    @Override
    public String importGzjt(WfzGzjt wfzGzjt) {
        GzffInfo gzftInfo = new GzffInfo();
        String fnumber = wfzGzjt.getFnumber(); //单据编码
        String fcompany = wfzGzjt.getFcompany(); //公司
        String fperiod = wfzGzjt.getFperiod();//薪酬期间
        BigDecimal fzrs = wfzGzjt.getFzrs(); //总人数
        BigDecimal fglf = wfzGzjt.getFglf();  //关联方人数
        BigDecimal fnscbzxrs = wfzGzjt.getFnscbzxrs();//合并纳税成本中心人数
        String fvourtype = wfzGzjt.getFvourtype(); //凭证字


        gzftInfo.setNumber(fnumber);
        gzftInfo.setCompany(fcompany);
        gzftInfo.setPeriod(fperiod);
        gzftInfo.setZrs(fzrs);
        gzftInfo.setGlf(fglf);
        gzftInfo.setNscbzxrs(fnscbzxrs);
        gzftInfo.setVourType(fvourtype);
        gzftInfo.setSourcebillid(String.valueOf(wfzGzjt.getFid()));

        List<WfzGzjtentry> wfzGzjtentryList = wfzGzjt.getWfzGzjtentryList();
        ArrayList<GzffEntryInfo> entry = new ArrayList<>();
        //组装分录数据
        for (int j=0;j<wfzGzjtentryList.size();j++){
            WfzGzjtentry wfzGzjtentry = wfzGzjtentryList.get(j);
            String fcostnumber = wfzGzjtentry.getFcostnumber();//成本中心
            String fcostcompany = wfzGzjtentry.getFcostcompany();//成本中心所属财务组织
            BigDecimal fyfgz = wfzGzjtentry.getFyfgz(); //应发工资
            BigDecimal fgryl = wfzGzjtentry.getFgryl(); //个人养老
            BigDecimal fgryy = wfzGzjtentry.getFgryy();//个人医疗
            BigDecimal fgrsy = wfzGzjtentry.getFgrsy(); //个人失业
            BigDecimal fgjj = wfzGzjtentry.getFgjj();//公积金
            BigDecimal fgrgjj = wfzGzjtentry.getFgrgjj();//个人公积金
            BigDecimal fbkgryl = wfzGzjtentry.getFbkgryl();//补扣个人养老
            BigDecimal fbkgryy = wfzGzjtentry.getFbkgryy();//补扣个人医疗
            BigDecimal fbkgrsy = wfzGzjtentry.getFbkgrsy();//补扣个人失业
            BigDecimal fbkgrzf = wfzGzjtentry.getFbkgrzf();//补扣个人住房
            BigDecimal fgrgfjf = wfzGzjtentry.getFgrgfjf();//个人工费经费
            BigDecimal fjrfl = wfzGzjtentry.getFjrfl();//节日福利
            BigDecimal fgwbnf = wfzGzjtentry.getFgwbnf();//高温/保暖费
            BigDecimal ffhbfl = wfzGzjtentry.getFfhbfl();//非货币性福利
            BigDecimal fsssdf = wfzGzjtentry.getFsssdf();//代扣宿舍水电费
            BigDecimal fzkk = wfzGzjtentry.getFzkk();//质扣款
            BigDecimal fgrsds = wfzGzjtentry.getFgrsds();//个人所得税

            BigDecimal ffk = wfzGzjtentry.getFfk();//罚款
            BigDecimal fsfhj = wfzGzjtentry.getFsfhj();//实发合计
            String fyhzh = wfzGzjtentry.getFyhzh();//银行账号
            String fjsfs = wfzGzjtentry.getFjsfs();//组织间结算方式
            String fcbzxffjg = wfzGzjtentry.getFcbzxffjg();//成本中心发放工资金融机构
            String fcbzxxz = wfzGzjtentry.getFcbzxxz();//成本中心属性
            String fsscwzz = wfzGzjtentry.getFsscwzz();//所属财务组织
            String fvourtype1 = wfzGzjtentry.getFvourtype();//凭证字

            GzffEntryInfo gzjtEntryInfo = new GzffEntryInfo();
            gzjtEntryInfo.setCostCenter(fcostnumber);
            gzjtEntryInfo.setCostcompany(fcostcompany);
            gzjtEntryInfo.setYfgz(fyfgz);
            gzjtEntryInfo.setGryl(fgryl);
            gzjtEntryInfo.setGryy(fgryy);
            gzjtEntryInfo.setGrsy(fgrsy);
            gzjtEntryInfo.setGjj(fgjj);
            gzjtEntryInfo.setGrgjj(fgrgjj);
            gzjtEntryInfo.setBkgryl(fbkgryl);
            gzjtEntryInfo.setBkgryy(fbkgryy);
            gzjtEntryInfo.setBkgrsy(fbkgrsy);
            gzjtEntryInfo.setBkgrzf(fbkgrzf);
            gzjtEntryInfo.setJrfl(fjrfl);
            gzjtEntryInfo.setGwbnf(fgwbnf);

            gzjtEntryInfo.setFhbfl(ffhbfl);
            gzjtEntryInfo.setSssdf(fsssdf);
            gzjtEntryInfo.setFk(ffk);
            gzjtEntryInfo.setGrsds(fgrsds);
            gzjtEntryInfo.setSfhj(fsfhj);
            gzjtEntryInfo.setJsfs(fjsfs);
            gzjtEntryInfo.setYhzh(fyhzh);
            gzjtEntryInfo.setCbzxxz(fcbzxxz);
            gzjtEntryInfo.setSscwzz(fsscwzz);
            gzjtEntryInfo.setGrgfjf(fgrgfjf);
            gzjtEntryInfo.setZkk(fzkk);
            gzjtEntryInfo.setCbzxffjg(fcbzxffjg);
            gzjtEntryInfo.setVourType(fvourtype1);
            entry.add(gzjtEntryInfo);

        }

        gzftInfo.setEntry(entry);


        //转化为json
        String json = JSONObject.toJSONString(gzftInfo);

        return json;
    }

    /**
     * 新增工资计提分录信息
     * 
     * @param wfzGzjt 工资计提对象
     */
    public void insertWfzGzjtentry(WfzGzjt wfzGzjt)
    {
        List<WfzGzjtentry> wfzGzjtentryList = wfzGzjt.getWfzGzjtentryList();
        Long fid = wfzGzjt.getFid();
        if (StringUtils.isNotNull(wfzGzjtentryList))
        {
            List<WfzGzjtentry> list = new ArrayList<WfzGzjtentry>();
            for (WfzGzjtentry wfzGzjtentry : wfzGzjtentryList)
            {
                wfzGzjtentry.setFparentid(fid);
                list.add(wfzGzjtentry);
            }
            if (list.size() > 0)
            {
                wfzGzjtMapper.batchWfzGzjtentry(list);
            }
        }
    }
}
